/***********************************************************************************************************************
 * Copyright (c) 2010 Ronald D. Kurr. Licensed under the Apache License, Version 2.0 (the "License"); you may not use
 * this file except in compliance with the License. You may obtain a copy of the License at
 * http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software
 * distributed under th License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
 * either express or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 **********************************************************************************************************************/

package org.kurron.web.service;

import java.net.MalformedURLException;
import java.net.URL;
import org.springframework.stereotype.Service;

/**
 * This object makes it a bit easier to properly construct URL objects.
 */
@Service
public final class UrlBuilder
{
    /**
     * Constructs a URL out of the provided information.
     * @param protocol the protocol to specify, typically http.
     * @param host the host name to use, eg. google.com.
     * @param port the port to specify, typically 80.
     * @param contextPath the deployment context for the web application.
     * @param path the path portion of the URL.
     * @return properly constructed URL.
     */
    public URL newUrl( final String protocol,
                       final String host,
                       final int port,
                       final String contextPath,
                       final String path )
    {
        try
        {
            final String context;
            if ( contextPath.isEmpty() )
            {
                context = "/";
            }
            else
            {
                context = contextPath;
            }
            return new URL( protocol, host, port, context + path );
        }
        catch( MalformedURLException e )
        {
            throw new MappingError( "Programmer error: unable to construct URL.", e );
        }
    }
}
